#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

//int main()
//{
//    int n = 0;
//    while (scanf("%d", &n) != EOF)
//    {
//        int num = 0;
//        while (n >= 3)
//        {
//            num += n / 3;
//            n = n / 3 + n % 3;
//        }
//        if (n == 2)
//        {
//            num += 1;
//        }
//        if (num)
//            printf("%d\n", num);
//    }
//    return 0;
//}

//int cmp(void* s1, void* s2)
//{
//    return (*(int*)s1) - (*(int*)s2);
//}
//int main()
//{
//    int arr[1000] = { 0 };
//    int n = 0;
//    scanf("%d", &n);
//    int i = 0;
//    for (i = 0; i < n; i++)
//    {
//        scanf("%d", &arr[i]);
//    }
//    qsort(arr, n, sizeof(int), cmp);
//
//    int j = 0;
//    for (i = 0, j = 0; j < n;)
//    {
//        if (arr[i] == arr[j])
//        {
//            arr[i] = arr[j];
//            j++;
//        }
//        else
//        {
//            i++;
//            arr[i] = arr[j];
//        }
//    }
//
//    for (j = 0; j <= i; j++)
//    {
//        printf("%d\n", arr[j]);
//    }
//    return 0;
//}

//int f(int n)
//{
//    if (n >= 3)
//    {
//        return f(n - 1) + f(n - 2);
//    }
//    else if (n == 2)
//    {
//        return 2;
//    }
//    else if (n == 1)
//    {
//        return 1;
//    }
//}
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    printf("%d\n", f(n));
//    return 0;
//}
//
//long long f(int n)
//{
//    if (n <= 1)
//    {
//        return 1;
//    }
//    else
//    {
//        return n * f(n - 1);
//    }
//}
//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    printf("%lld\n", f(n));
//    return 0;
//}

//int Ackmann(int n, int m)
//{
//    if (m == 0)
//    {
//        return n + 1;
//    }
//    else if (m > 0 && n == 0)
//    {
//        return Ackmann(m, 1);
//    }
//    else if (m > 0 && n > 0)
//    {
//        return Ackmann(m - 1, Ackmann(m, n - 1));
//    }
//}
//int main()
//{
//    int n, m;
//    scanf("%d%d", &n, &m);
//    printf("%d\n", Ackmann(n, m));
//    return 0;
//}

//// int main() 
//// {
////     int x=0;
////     int i=0;
////     scanf("%d%d",&x,&i);
////     int arr[50];
////     int k=0;
////     for(k=0;k<i;k++)
////     {
////         arr[k]=x%10;
////         x/=10;
////     }
//
////     int ret=0;
////     for(k--;k>=0;k--)
////     {
////         ret=ret*10+arr[k];
////     }
////     printf("%d",ret);
////     return 0;
//// }
//
//int f(int x, int i)
//{
//    if (i == 1)
//    {
//        return x % 10;
//    }
//    else if (i > 1)
//    {
//        return 10 * f(x / 10, i - 1) + x % 10;
//    }
//    else
//        return 0;
//}
//int main()
//{
//    int x = 0;
//    int i = 0;
//    scanf("%d%d", &x, &i);
//    int ret = f(x, i);
//    printf("%d", ret);
//    return 0;
//}

int Hermite(int n, int x)
{
    if (n == 0)
        return 1;
    else if (n == 1)
        return 2 * n;
    else if (n > 1)
        return 2 * x * Hermite(n - 1, x) - 2 * (n - 1) * Hermite(n - 2, x);
    else
        return 0;
}
int main()
{
    int n = 0;
    int x = 0;
    scanf("%d%d", &n, &x);
    int ret = Hermite(n, x);
    printf("%d\n", ret);
    return 0;
}